﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kopytko.GameBase;

namespace Kopytko.BoardGame
{
    interface IBoardLogic
    {
        event EventHandler PlayerChanged;

        /// <summary>
        /// Ustawia stan poczatkowy gry, resetuje wszystko
        /// Wypelnia kontenery pionkow
        /// </summary>
        void Init();

        /// <summary>
        /// Zwraca obiekt gracza, ktorego jest teraz kolej,
        /// jezeli po bibiu dalej jest moja kolej, to musi byc ustawione odpowiednio.
        /// </summary>
        /// <returns></returns>
        IPlayer WhoTurnIs();

        /// <summary>
        /// Dla zadanego miejsca (X,Y) zwraca liste wszystkich dostepnych ruchow (poprawnych!)
        /// </summary>
        /// <param name="currentPosition"></param>
        /// <returns></returns>
        IEnumerable<BoardPosition> GetAvailableMovements(BoardPosition currentPosition);

        /// <summary>
        /// Dla zadanej pozycji określa, czy pionek tam postawiony może zostać ruszony
        /// np w sytuacji gdzie bicie gdzies jest wymuszone, albo jestesmy szachowani, powinien 
        /// zwracac False dla niedozwolonych pionkow w tym momencie
        /// Dla pionkow przeciewnika rowniez False.
        /// </summary>
        /// <param name="currentPosition"></param>
        /// <returns></returns>
        bool IsMoveAllowed(BoardPosition currentPosition);

        /// <summary>
        /// Wykonuje ruch
        /// </summary>
        /// <param name="currentPosition">Aktualna pozycja</param>
        /// <param name="destPosition">Docelowa pozycja</param>
        /// <returns>True, jezeli wykonano bicie</returns>
        MoveResult  Move(BoardPosition currentPosition, BoardPosition destPosition);

    }
}
